package main

import "fmt"

// int的惰性生成器

func makeIntGen() func() int {
	i, k := 0, 0
	return func() int {
		i, k = k, k+1
		return i
	}
}

func chanIntGen() func() int {
	ch := make(chan int)
	i := 0
	go func() {
		for {
			ch <- i
			i += 2
		}
	}()

	return func() int {
		return <-ch
	}
}

func main() {
	intGen := makeIntGen()

	fmt.Println(intGen())
	fmt.Println(intGen())
	fmt.Println(intGen())

	intGenCh := chanIntGen()
	fmt.Println(intGenCh())
	fmt.Println(intGenCh())
	fmt.Println(intGenCh())
	fmt.Println(intGenCh())
}
